/**
 * @Title: BaseMapper.java
 * @Package com.lemon.baseMapper
 * @Description: (一句话阐述):
 * @author Ran_cc
 * @date 2018年6月15日
 * @version V1.0
 */
package com.lemon.mapper.baseMapper;

import java.util.List;

/**
 * <p>
 * Title: BaseMapper
 * </p>
 * <p>
 * Description: 通用的mapper接口的base封装 , 自动生成的mapper文件中有些没有,要自己添加对应的接口信息
 * </p>
 * <p>
 * Company:
 * </p>
 * 
 * @author Ran_cc
 * @date 2018年6月15日
 * @版本 V 1.0
 */
public interface BaseMapper<T> {

	/************************************** 查询 **************************************************/
	/**
	 * <b>Description:<em><blockquote> 根据id查询单条信息 </blockquote></em></b>
	 * 
	 * @Title: selectByPrimaryKey
	 * @param id
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月15日
	 */
	T selectByPrimaryKey(Object id) throws Exception;

	/**
	 * <b>Description:<br>
	 * <blockquote> 根据条件查询单个对象信息 </blockquote> </b>
	 * 
	 * @Title: selectBySelective
	 * @param record
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月16日
	 */
	T selectBySelective(T record) throws Exception;

	/**
	 * <b>Description:<br>
	 * 根据条件查询集合对象信息 </b>
	 * 
	 * @Title: selectListBySelective
	 * @param record
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月16日
	 */
	List<T> selectListBySelective(T record) throws Exception;

	/**
	 * <b>Description:<blockquote>根据条件查询数量
	 * </blockquote></b>
	 * 
	 * @Title: selectCountBySelective
	 * @param record
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月16日
	 */
	int selectCountBySelective(T record) throws Exception;

	/************************************** 添加 **************************************************/

	/**
	 * <b>Description:<em><blockquote> 插入单条信息 , 匹配所有字段 </blockquote></em></b>
	 * 
	 * @Title: insert
	 * @param record
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月15日
	 */
	int insert(T record) throws Exception;

	/**
	 * <b>Description:<em><blockquote> 插入单条信息 ,空值不添加 </blockquote></em></b>
	 * 
	 * @Title: insertSelective
	 * @param record
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月15日
	 */
	int insertSelective(T record) throws Exception;

	/**
	 * <b>Description:<em><blockquote> 批量添加 , list封装参数对象集合 </blockquote></em></b>
	 * 
	 * @Title: insertBatch
	 * @param list
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月15日
	 */
	int insertBatch(List<T> list) throws Exception;

	/************************************** 修改 **************************************************/

	/**
	 * <b>Description:<br>
	 * <br>
	 * 修改不为空的字段值,对象主键不能为空
	 * </b>
	 * 
	 * @Title: updateByPrimaryKeySelective
	 * @param record
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月16日
	 */
	int updateByPrimaryKeySelective(T record) throws Exception;

	/**
	 * <b>Description:<br>
	 * 字段全部修改,实体类属性为空,则修改为null值,对象主键不能为空 </b>
	 * 
	 * @Title: updateByPrimaryKey
	 * @param record
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月16日
	 */
	int updateByPrimaryKey(T record) throws Exception;

	/************************************** 删除 **************************************************/

	/**
	 * <b>Description:<blockquote> 根据id删除某条信息 ,软删除</blockquote></b>
	 * 
	 * @Title: deleteByPrimaryKey
	 * @param id
	 * @return
	 * @author Ran_cc
	 * @date 2018年6月15日
	 */
	int deleteByPrimaryKey(Object id) throws Exception; // 根据id删除某条信息 ,软删除

}
